iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
Build on Google AI

30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」系列 第 16

Day 16 | 絕對精準:深度解析 Gemini JSON Mode 強制格式輸出

  • 分享至 

  • xImage
  •  

大家好!歡迎來到「Build on Google AI」工程挑戰的第 16 天。

昨天我們成功建立了 PM Agent 與 RD Agent 的交接工作流。但在真實的 Multi-Agent 系統中,如果前一個 Agent 輸出了一句「好的,這是您要的 JSON:」,然後才接著輸出資料結構,下一個負責執行的 Agent 或後端系統(呼叫 json.loads())就會瞬間崩潰。

Prompt Engineering 的盡頭,終究是 Software Engineering。面對這種問題,我們不能靠「跪求模型不要說廢話」,而是要用工程手段強制約束它。今天,我們來看看 Google ADK 如何優雅地解決這個痛點。

第一步:告別脆弱的 Prompt,擁抱 Pydantic 強型別
在 ADK 的設計哲學中,Agent 的輸出不該是一團未知的字串,而應該是具備強型別 (Strongly Typed) 的物件。我們可以透過 Python 業界標準的 Pydantic 來定義 RD Agent 必須遵守的產出規格。

這就像是為 Agent 戴上「緊箍咒」,連欄位名稱、資料型別,甚至是巢狀陣列,都受到嚴格限制。

from pydantic import BaseModel, Field
from typing import List

# 1. 嚴格定義 RD Agent 的產出規格
class APIEndpoint(BaseModel):
    path: str = Field(description="API 路徑,例如 /api/v1/users")
    method: str = Field(description="HTTP 方法,嚴格限制為 GET, POST, PUT, DELETE 之一")
    description: str

class SystemArchitecture(BaseModel):
    service_name: str
    endpoints: List[APIEndpoint]

第二步:在 ADK Agent 中綁定 Response Schema
有了 Pydantic 模型後,我們不需要像使用底層 SDK 那樣去設定複雜的 GenerationConfig 或 MIME Type。在 Google ADK 中,你只需要在宣告 Agent 時,將定義好的 Schema 傳給 response_schema 參數。

ADK 會自動在底層切換 Gemini 的 JSON Mode,並將 Schema 轉換為 OpenAPI 規格傳遞給模型。

from google.adk import Agent

# 2. 初始化 RD Agent 並綁定強制輸出格式
rd_agent = Agent(
    name="rd_agent",
    model="gemini-2.5-pro", # 實作邏輯需要高階推理能力
    instruction="你是一個資深後端 RD。請根據需求,設計乾淨、符合 RESTful 風格的 API 架構。",
    response_schema=SystemArchitecture # 這是確保絕對精準的魔法
)

第三步:享受「絕對精準」的呼叫體驗
現在,我們的 Prompt 可以回歸本質,專注於「業務邏輯」,再也不用浪費 Token 去描述 JSON 格式了。最棒的是,ADK 回傳的結果已經被自動驗證並解析為 Python 物件!

# 3. 極簡的 Prompt,直接下達需求
prompt = "請幫我設計一個『活動報名系統』的用戶登入與活動報名模組。"

# 執行 Agent
response = rd_agent.invoke(prompt)

# 不用 json.loads(),不用 strip() 去除 Markdown!
# response 直接具備屬性存取能力 (強型別)
print(f"微服務名稱: {response.service_name}")
for ep in response.endpoints:
    print(f"[{ep.method}] {ep.path} -> {ep.description}")

為什麼 ADK 的封裝如此關鍵? (Determinism in AI)
在企業級系統中,我們追求的是 確定性 (Determinism)。
透過 ADK 的 response_schema:

  • 1 防禦幻覺:如果模型試圖回傳未定義的屬性,或者把 Array 寫成 String,底層 API 會直接在生成階段進行約束。

  • 2 無縫串接:在 Multi-Agent 流程中,這個強型別的產出可以 100% 安全地作為參數,直接傳遞給下層的工具 (Tools) 或下一個 Agent。

https://ithelp.ithome.com.tw/upload/images/20260917/20121643p7sikH7Eg5.png

https://ithelp.ithome.com.tw/upload/images/20260917/20121643VZdWDn9BT9.png

小結
今天,我們利用 ADK 與 Pydantic,為 RD Agent 裝上了「絕對精準」的輸出限制,徹底消滅了 JSON 解析的惡夢。

現在,我們的 PM 和 RD Agent 已經能完美合作,產出精確無誤的架構與執行腳本。但如果這些腳本包含「直接對資料庫下達 UPDATE」或「發送正式 Email」的操作呢?我們能讓 Agent 全自動執行嗎?


上一篇
Day 15 | 任務交接:打造 RD (編劇) Agent,解讀 PM 的情報
下一篇
Day 17 | 結構化魔法:定義時間軸、畫面與旁白的分鏡表 Schema
系列文
30 天用 Google ADK 打造你的「全自動 AI 虛擬團隊」20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言